package com.hou.core;

import cn.hutool.core.date.*;
import cn.hutool.core.lang.Console;

import java.util.Calendar;
import java.util.Date;

public class DateUtilDemo {

    // 日期转换
    public void dateUtilTest01(){
        //获取当前时间三种方式
        Date date = DateUtil.date();
        Date date2 = DateUtil.date(Calendar.getInstance());
        Date date3 = DateUtil.date(System.currentTimeMillis());
        //当前时间字符串，格式：yyyy-MM-dd HH:mm:ss
        String now = DateUtil.now();
        //当前日期字符串，格式：yyyy-MM-dd
        String today= DateUtil.today();

        // 字符串转日期
        String dateStr = "2017-03-01";
        Date date4 = DateUtil.parse(dateStr, "yyyy-MM-dd");
        // 日期转字符串
        //结果 2017/03/01
        String format = DateUtil.format(date4, "yyyy/MM/dd");

        //常用格式的格式化，结果：2017-03-01
        String formatDate = DateUtil.formatDate(date);
        //结果：2017-03-01 00:00:00
        String formatDateTime = DateUtil.formatDateTime(date);
        //结果：00:00:00
        String formatTime = DateUtil.formatTime(date);
    }

    public void dateUtilTest02(){
        // 获取日期某个部分
        Date date = DateUtil.date();
        //获得年的部分
        DateUtil.year(date);
        //获得月份，从0开始计数
        DateUtil.month(date);
        //获得月份枚举
        DateUtil.monthEnum(date);
        // 获取开始时间和结束时间
        String dateStr = "2017-03-01 22:33:23";
        Date date1 = DateUtil.parse(dateStr);

        //一天的开始，结果：2017-03-01 00:00:00
        Date beginOfDay = DateUtil.beginOfDay(date);

        //一天的结束，结果：2017-03-01 23:59:59
        Date endOfDay = DateUtil.endOfDay(date);
    }

    public void dateUtilTest03(){
        // 时间偏移
        String dateStr = "2017-03-01 22:33:23";
        Date date = DateUtil.parse(dateStr);

        //结果：2017-03-03 22:33:23
        Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);

        //常用偏移，结果：2017-03-04 22:33:23
        DateTime newDate2 = DateUtil.offsetDay(date, 3);

        //常用偏移，结果：2017-03-01 19:33:23
        DateTime newDate3 = DateUtil.offsetHour(date, -3);
        //当前时间简化API偏移
        //昨天
        DateUtil.yesterday();
        //明天
        DateUtil.tomorrow();
        //上周
        DateUtil.lastWeek();
        //下周
        DateUtil.nextWeek();
        //上个月
        DateUtil.lastMonth();
        //下个月
        DateUtil.nextMonth();

        // 时间差
        String dateStr1 = "2017-03-01 22:33:23";
        Date date1 = DateUtil.parse(dateStr1);
        String dateStr2 = "2017-04-01 23:36:55";
        Date date2 = DateUtil.parse(dateStr2);
        // 时间差： 单位  输出：31
        long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
        System.out.println(betweenDay);
        // 格式化输出时间差
        //Level表示精确单位，如果为0 则不显示：
        String formatBetween = DateUtil.formatBetween(date1, date2, BetweenFormatter.Level.SECOND);
        //输出：31天1小时3分32秒
        Console.log(formatBetween);
    }

    public void dateUtilTest04(){
        // 计时器
        TimeInterval timer = DateUtil.timer();

        //-------这是执行过程

        timer.interval();//花费毫秒数
        timer.intervalRestart();//返回花费时间，并重置开始时间
        long minute = timer.intervalMinute();//花费分钟数

        // 星座和属相，年龄
        // 1月19 是 "摩羯座"
        String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);
        // "狗"
        String chineseZodiac = DateUtil.getChineseZodiac(1994);
        //年龄
        DateUtil.ageOfNow("1990-01-30");
        //是否闰年
        DateUtil.isLeapYear(2017);
    }
}
